<!-- 系统登录页面 -->
<template>
  <div class="eleme-login">
    <div class="login_box">
      <div class="avatar_box">
        <img src="../assets/logo.png" alt="" />
      </div>
      <div class="eleme-login-title">
        <h1>后台管理系统</h1>
      </div>
      <el-form
        class="login_form"
        :model="formDate"
        :rules="rules"
        ref="loginFormRef"
      >
        <el-form-item prop="username">
          <el-input
            v-model="formDate.username"
            placeholder="用户名"
            prefix-icon="el-icon-s-custom"
          ></el-input>
        </el-form-item>
        <!-- prop值要与formDate.password key值保持一致 -->
        <el-form-item prop="password">
          <el-input
            v-model="formDate.password"
            placeholder="密码"
            show-password
            prefix-icon="el-icon-s-goods"
          >
          </el-input>
        </el-form-item>
        <el-form-item class="btns">
          <!-- 添加登录点击事件 -->
          <el-button type="primary" @click="handleSubmit">登录</el-button>
          <el-button type="info" @click="resetLoginForm">重置</el-button>
        </el-form-item>
      </el-form>
      <div class="eleme-login-tip">
        <p class="tip">温馨提示:</p>
        <p class="tip">未登录过的新用户，自动注册</p>
        <p class="tip">注册过的用户可凭账号密码登录</p>
      </div>
    </div>
  </div>
</template>

<script>
//这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）
//例如：import 《组件名称》 from '《组件路径》';
import { loginService } from "../api/index"; //引入封装好的axios请求
import CryptoJS from "crypto-js";
export default {
  //import引入的组件需要注入到对象中才能使用
  components: {},
  data() {
    //这里存放数据
    return {
      //这是登录表单的数据绑定对象
      formDate: {
        username: "adminlym",
        password: "adminlym",
      },
      //这是表单的验证规则对象
      rules: {
        //验证密码是否合法
        password: [
          { required: true, message: "请输入密码", trigger: "blur" },
          { min: 3, max: 10, message: "长度在 3 到 5 个字符", trigger: "blur" },
        ],
        //验证用户名是否合法
        username: [
          { required: true, message: "请输入用户名", trigger: "blur" },
        ],
      },
    };
  },
  //监听属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {},
  //方法集合
  methods: {
    // 定义登录点击的方法
    handleSubmit: function () {
      // console.log(this.$refs)

      //这个地方要使用箭头函数
      this.$refs.loginFormRef.validate((valid) => {
        //console.log(valid)
        if (valid) {
          //用crypto-js对发送的密码加密
          let Key = "ssssssss";
          let password = CryptoJS.HmacSHA1(
            this.formDate.password,
            Key
          ).toString();
          //这个地方要先安装axios依赖(yard add axios),然后在main.js中引入请求库AXIOS,但是我们又将axios进行了封装,到api文件夹的index.js中,所以最终导入的是这个文件
          //发送请求给后台
          loginService(this.formDate.username, password).then((res) => {
            //loginService是自己之前api文件夹中封装好的,所以直接导入使用就剋以
            //  console.log(res)
            if (res.status === 1) {
              localStorage.setItem("login", "true");
              console.log(this.$store); //vuex是状态管理器,类似于一个大仓库
              this.$store.commit("login", "true"); //提交了一个同步的修改
              this.$router.push("/dashboard"); //为1则为登录成功,需要跳转到dashboard页面
            } else {
              this.$notify.error({
                title: "error",
                message: "登录失败了",
              });
            }
          });
        } else this.$message.error("输入内容格式有问题！");
      });
    },

    //点击重置按钮
    resetLoginForm: function () {
      console.log(this); //这里的this就是当前的form实例对象
      this.$refs.loginFormRef.resetFields();
    },
  },
  //生命周期 - 创建完成（可以访问当前this实例）
  created() {},
  //生命周期 - 挂载完成（可以访问DOM元素）
  mounted() {},
  beforeCreate() {}, //生命周期 - 创建之前
  beforeMount() {}, //生命周期 - 挂载之前
  beforeUpdate() {}, //生命周期 - 更新之前
  updated() {}, //生命周期 - 更新之后
  beforeDestroy() {}, //生命周期 - 销毁之前
  destroyed() {}, //生命周期 - 销毁完成
  activated() {}, //如果页面有keep-alive缓存功能，这个函数会触发
};
</script>
<style lang='less' scoped>
.eleme-login-title {
  position: absolute;
  top: 73px;
  left: 105px;
  font-size: 14px;
  text-align: center;
}
.eleme-login {
  height: 100vh;
  width: 100%;
  background-color: var(--themeColor);
}
.login_box {
  width: 400px;
  height: 370px;
  background-color: white;
  border-radius: 10px;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);

  .avatar_box {
    height: 130px;
    width: 130px;
    border: 1px solid #eee;
    border-radius: 50%;
    padding: 10px;
    box-shadow: 0 0 10px #ddd;
    background-color: white;
    position: relative;
    left: 50%;
    transform: translate(-50%, -50%);

    img {
      width: 100%;
      height: 100%;
      border-radius: 50%;
      background-color: #eee;
    }
  }
}
.login_form {
  position: absolute;
  top: 140px;
  width: 100%;
  padding: 0 20px;
}
.btns {
  display: flex;
  justify-content: center;
}
.eleme-login-tip {
  position: absolute;
  bottom: 5px;
  left: 110px;
  .tip {
    color: red;
    font-size: 12px;
    text-align: center;
  }
}
</style>